/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sigepa;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import pe.edu.pucp.Envios.Controlador.AdministrarEnviosControlador;
import pe.edu.pucp.Envios.Controlador.VueloControladorEnvios;
import pe.edu.pucp.Envios.DAO.EnviosDAO;
import pe.edu.pucp.Envios.DAO.VueloDAO;
import pe.edu.pucp.Envios.Vista.AdministrarEnviosGUI;
import pe.edu.pucp.Envios.Vista.VuelosGUI;
import pe.edu.pucp.Maestros.Controlador.BuscarAeropuertoControlador;
import pe.edu.pucp.Maestros.Controlador.DatosInicialesControlador;
import pe.edu.pucp.Maestros.Controlador.DatosSimulacionControlador;
import pe.edu.pucp.Maestros.Controlador.MaestroVueloControlador;
import pe.edu.pucp.Maestros.Controlador.VueloControlador;
import pe.edu.pucp.Maestros.DAO.AeropuertoDAO;
import pe.edu.pucp.Maestros.DAO.MaestoVueloDAO;
import pe.edu.pucp.Maestros.DAO.VueloCargaDAO;
import pe.edu.pucp.Maestros.Vista.BuscarAeropuertoGUI;
import pe.edu.pucp.Maestros.Vista.CargaXMLGUI;
import pe.edu.pucp.Maestros.Vista.MaestoVueloGUI;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Reportes.Controlador.ReporteAlmacenControlador;
import pe.edu.pucp.Reportes.Controlador.ReporteAuditoriaControlador;
import pe.edu.pucp.Reportes.Controlador.ReporteCancelacionControlador;
import pe.edu.pucp.Reportes.Controlador.ReporteEnviosControlador;
import pe.edu.pucp.Reportes.Controlador.ReporteKardexControlador;
import pe.edu.pucp.Reportes.Controlador.ReporteSaturacionControlador;
import pe.edu.pucp.Reportes.DAO.ReporteAlmacenDAO;
import pe.edu.pucp.Reportes.DAO.ReporteAuditoriaDAO;
import pe.edu.pucp.Reportes.DAO.ReporteCancelacionDAO;
import pe.edu.pucp.Reportes.DAO.ReporteEnviosDAO;
import pe.edu.pucp.Reportes.DAO.ReporteKardexDAO;
import pe.edu.pucp.Reportes.DAO.ReporteSaturacionDAO;
import pe.edu.pucp.Reportes.Vista.ReporteAlmacenGUI;
import pe.edu.pucp.Reportes.Vista.ReporteAuditoriaGUI;
import pe.edu.pucp.Reportes.Vista.ReporteCancelacionGUI;
import pe.edu.pucp.Reportes.Vista.ReporteEnviosGUI;
import pe.edu.pucp.Reportes.Vista.ReporteKardexGUI;
import pe.edu.pucp.Reportes.Vista.ReporteSaturacionGUI;
import pe.edu.pucp.Seguridad.Controlador.BuscarPerfilControlador;
import pe.edu.pucp.Seguridad.Controlador.BuscarUsuarioControlador;
import pe.edu.pucp.Seguridad.Controlador.CambiarPassControlador;
import pe.edu.pucp.Seguridad.Controlador.ConfiguracionControlador;
import pe.edu.pucp.Seguridad.Controlador.LoginControlador;
import pe.edu.pucp.Seguridad.DAO.ConfiguracionDAO;
import pe.edu.pucp.Seguridad.DAO.PerfilDAO;
import pe.edu.pucp.Seguridad.DAO.UsuarioDAO;
import pe.edu.pucp.Seguridad.Vista.BuscarPerfilGUI;
import pe.edu.pucp.Seguridad.Vista.BuscarUsuarioGUI;
import pe.edu.pucp.Seguridad.Vista.CambiarPassGUI;
import pe.edu.pucp.Seguridad.Vista.ConfiguracionGUI;
import pe.edu.pucp.Seguridad.Vista.LoginGUI;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Ventas.Controlador.BuscarClientesControlador;
import pe.edu.pucp.Ventas.DAO.ClientesDAO;
import pe.edu.pucp.Ventas.Vista.BuscarClienteGUI;

   
    

public class MainController {
    private MainMenuGUI mview;
    private Usuario usr;
    private UsuarioDAO m;
    private ValidaCarga vc;
  

    
    public MainController(MainMenuGUI v, Usuario usuario){
        m=new UsuarioDAO();        
        mview = v;
        usr = usuario;
        mview.llenarPanelInfo(usr);
        mview.mostrarPermisos(new  ArrayList<Permiso>(usr.getPerfil().getPermisos()));
      
        mview.addSalir(new salirSistema());
        mview.addVentana(new cerrarVentana());
        mview.addSesion(new salirSesion());
        mview.addCambiar(new cambiarPass());        
        
        mview.addBuscarPerfil(new buscarPerfil(this));        
        mview.addBuscarUsuario(new buscarUsuario(this));        
        mview.addConfiguracion(new configuracion());
        mview.addMostrarReporteAuditoria(new reporteAuditoria());
        
        mview.addBuscarAeropuerto(new buscarAeropuerto());        
        mview.addMostrarCargarVuelos(new mostrarCargarVuelos());
        mview.addDatosMasivos(new administrarXML()); 
        
        mview.addMostrarVuelos(new mostrarVuelos());
        mview.addBuscarCliente(new buscarCliente());        
        mview.addBuscarAlmacen(new administrarEnvios());
        mview.addMostrarReporteEnvios(new reporteEnvios());
        
        mview.addMostrarSimulacion(new reporteSimulacion());                
        
        mview.addMostrarReporteKardex(new reporteKardex());
        mview.addMostrarReporteAlmacen(new reporteAlmacen());        
        mview.addMostrarReporteCancelacion(new reporteCancelacion());
        vc=new ValidaCarga();
    }   
    
    public class ValidaCarga{
        public boolean cargado;    
        public void validaCarga(){
            cargado=false;
        }        
    } 
    
    public void updateUsuario(Usuario user){
        usr=user;
        mview.llenarPanelInfo(usr);
        mview.mostrarPermisos(new  ArrayList<Permiso>(user.getPerfil().getPermisos()));        
    }    
  
    class cambiarPass implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {                 
            CambiarPassGUI view = new CambiarPassGUI(mview,true);
            CambiarPassControlador c = new CambiarPassControlador(m,view,usr);             
            view.setVisible(true);
        }        
    }     
    
    class salirSistema implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {                 
            usr.setConexion(m.buscarEstadoConexion(Constante.ESTADO_SESION_DESCONECTADO));
            m.modificarUsuario(usr);            
            mview.dispose();
        }        
    }      
    
    class salirSesion implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            usr.setConexion(m.buscarEstadoConexion(Constante.ESTADO_SESION_DESCONECTADO));
            m.modificarUsuario(usr);            
            LoginGUI login = new LoginGUI();
            LoginControlador c = new LoginControlador(m,login);             
            login.setVisible(true);
            mview.dispose();
        }        
    }      

    class cerrarVentana extends WindowAdapter{
        @Override
        public void windowClosing(WindowEvent e) {            
            usr.setConexion(m.buscarEstadoConexion(Constante.ESTADO_SESION_DESCONECTADO));
            m.modificarUsuario(usr);              
        }        
    }    

    class buscarPerfil implements ActionListener{
        private MainController mc;
        public buscarPerfil(MainController mcont){
            mc=mcont;
        }        
        @Override
        public void actionPerformed(ActionEvent e) {            
            BuscarPerfilGUI p = new BuscarPerfilGUI();            
            BuscarPerfilControlador c = new BuscarPerfilControlador(new PerfilDAO(), p, usr,mc);
            mview.setCurrentPanel(p);   
            mview.setTitle("SIGEPA - Perfiles");
        }
    }    
    
    class buscarUsuario implements ActionListener {
        private MainController mc;
        public buscarUsuario(MainController mcont){
            mc=mcont;
        }         
        @Override
        public void actionPerformed(ActionEvent e) {                   
            BuscarUsuarioGUI p = new BuscarUsuarioGUI();
            BuscarUsuarioControlador c = new BuscarUsuarioControlador(new UsuarioDAO(), p, usr,mc);
            mview.setCurrentPanel(p);   
            mview.setTitle("SIGEPA - Usuarios");
        }
    
    }    
    
    class configuracion implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {                        
            ConfiguracionGUI p = new ConfiguracionGUI();
            ConfiguracionControlador c = new ConfiguracionControlador(new ConfiguracionDAO(), p, usr);
            mview.setCurrentPanel(p);
            mview.setTitle("SIGEPA - Configuración");
        }
    
    }    
    
    class reporteAuditoria implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteAuditoriaGUI view = new ReporteAuditoriaGUI();
            ReporteAuditoriaControlador l = new ReporteAuditoriaControlador(new ReporteAuditoriaDAO(),view,usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Reporte de Auditoría");
        }
        
    }    

    class buscarAeropuerto implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {            
            BuscarAeropuertoGUI p = new BuscarAeropuertoGUI();
            BuscarAeropuertoControlador c = new BuscarAeropuertoControlador(new AeropuertoDAO(), p, usr);
            mview.setCurrentPanel(p);
            mview.setTitle("SIGEPA - Aeropuertos");
        }
    }    
    
    class mostrarCargarVuelos  implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {            
            MaestoVueloGUI  view = new MaestoVueloGUI();
            MaestroVueloControlador c = new MaestroVueloControlador(new MaestoVueloDAO(), view,usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Carga Vuelos");
        }
    
    }
    
    class administrarXML implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            CargaXMLGUI view = new CargaXMLGUI(vc);            
            DatosInicialesControlador k = new DatosInicialesControlador(view,usr);
            DatosSimulacionControlador j = new DatosSimulacionControlador(view,usr);
            VueloControlador l = new VueloControlador(new VueloCargaDAO(),view,usr);            
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Carga Masiva");
        }
    }
    

    class mostrarVuelos implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {            
            VuelosGUI view = new VuelosGUI();
            VueloControladorEnvios c = new VueloControladorEnvios(new VueloDAO(), view, usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Vuelos");
        }        
    }
    
    class buscarCliente implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {       
            BuscarClienteGUI p = new BuscarClienteGUI(mview);
            BuscarClientesControlador c = new BuscarClientesControlador(new ClientesDAO(),p, usr);
            mview.setCurrentPanel(p);
            mview.setTitle("SIGEPA - Clientes");
        }
    }    
    
    class administrarEnvios implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {                        
            AdministrarEnviosGUI p = new AdministrarEnviosGUI();
            AdministrarEnviosControlador c = new AdministrarEnviosControlador(new EnviosDAO(), p, usr);
            mview.setCurrentPanel(p);
            mview.setTitle("SIGEPA - Almacenes");
        }
    }    
    
    class reporteEnvios implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteEnviosGUI view = new ReporteEnviosGUI();
            ReporteEnviosControlador l = new ReporteEnviosControlador(new ReporteEnviosDAO(),view, usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Reporte de Envios");
        }
        
    }        
    
    class reporteSimulacion implements ActionListener {
        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteSaturacionGUI view = new ReporteSaturacionGUI(mview);
            ReporteSaturacionControlador l = new ReporteSaturacionControlador(new ReporteSaturacionDAO(),view, usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Simulación");
        }
    
    }
    
    class reporteKardex implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteKardexGUI view = new ReporteKardexGUI();
            ReporteKardexControlador l = new ReporteKardexControlador(new ReporteKardexDAO(),view,usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Reporte de Kardex");
        }
        
    }    
    
    class reporteAlmacen implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteAlmacenGUI view = new ReporteAlmacenGUI();
            ReporteAlmacenControlador l = new ReporteAlmacenControlador(new ReporteAlmacenDAO(),view,usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Reporte de Almacen");
        }
        
    }
      
    class reporteCancelacion implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            ReporteCancelacionGUI view = new ReporteCancelacionGUI();
            ReporteCancelacionControlador l = new ReporteCancelacionControlador(new ReporteCancelacionDAO(),view,usr);
            mview.setCurrentPanel(view);
            mview.setTitle("SIGEPA - Reporte de Cancelacion");
        }
        
    }   
    

}
